<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    function array(s) {
      //双指针解法，首先定首尾。
      let left = 0;
      let right = s.length - 1
      //其次进入到while循环当中。
      while (left < right) {
        //先抓出两边指针不相同的特例
        if (s[left] !== s[right]) {
          //由于本题需要给一次删除元素的机会，我们可以理解为，我们有一次跳过该元素的机会，于是乎我在下方创建了一个函数用于跳过后继续验证。
          //关键语句在这一句：两种跳过的方法，用or来return出结果，只要有一个是true,则用掉这次机会之后依旧判断为回文字符串。
          const res = oneChance(left + 1, right) || oneChance(left, right - 1)
          return res
        }
        left++
        right--
      }
      //在指针走到left=right或者left>right还未返回false，则回文串成立。
      return true
      //下方是给一个机会跳过验证错误的函数，思路与上方基本一致。
      function oneChance(left, right) {
        while (left < right) {
          if (s[left] !== s[right]) {
            return false
          }
          left++
          right--
        }
        return true
      }
    };
    console.log(array('abca'))

  </script>
</body>

</html>